package student.aistar.day09;

/**
 * 字符串的各种比较
 */
public class StringCompare {
    public static void main(String[] args) {
        //s1默认指向的是堆里面的地址, s2默认指向的是字符串常量池
        String s1 = new String("abc");
        String s2 = "abc";
        System.out.println(s1 == s2);//false

        //intern()强制让s1指向字符串常量池的对象
        System.out.println(s1.intern() == s2);//true

        String s3 = "b";
        String s4 = "a" + s3;//因为s3为变量, 所以会创建一个StringBuilder转化之后才能拼接
        String s5 = "a" + "b";//因为"a" 和 "b" 都为字符串常量, 当成"ab"直接在字符串常量池中拼接
        System.out.println(s4 == s5);//true

        //字符串使用final修饰
        final String s6 = "b";//
        String s7 = "a" + s6;
        System.out.println("ab" == s7);//true   因为s6被final修饰,被当成一个常量, 所以直接放在常量池里面

        String x1 = new String("abc");
        String x2 = new String("abc");
        System.out.println(x1 == x2);

        System.out.println(x1);

        //希望字符串的值是一样的, 就希望返回true
        System.out.println(x1.equals(x2));
    }
}
